package com.ys.web.user.friends.mapper;

import com.ys.base.BaseMapper;
import com.ys.web.user.friends.po.BaseUserGroupPO;
import com.ys.web.user.friends.vo.UnAuditVO;
import com.ys.web.user.friends.vo.UserGroupVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.data.redis.core.ZSetOperations;

import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * @author quxinjun
 * @version 1.0.0
 * @ClassName UserGroupMapper.java
 * @Description UserGroupMapper
 * @createTime 2021年05月13日 20:03:00
 */
@Mapper
public interface UserGroupMapper extends BaseMapper<BaseUserGroupPO> {

    /**
     * @param uid 用户id
     * @title findUserGroupList
     * @description 查询用户当前有哪些群组
     * @author quxinjun
     * @updateTime 2021/5/17 21:30
     * @return: java.util.List<java.lang.String>
     */
    List<String> findUserGroupList(Long uid);

    /**
     * @param groupId 组id
     * @param delId   删除的成员id
     * @title delMemberById
     * @description
     * @author quxinjun
     * @updateTime 2021/5/18 13:45
     */
    int delMemberById(@Param("groupId") String groupId, @Param("list") List<Long> list);

    /**
     * @param uid     用户id
     * @param groupId 组id
     * @title findUserGroupNameById
     * @description 获取用户在群中的备注名称
     * @author quxinjun
     * @updateTime 2021/5/18 18:28
     * @return: java.lang.String
     */
    String findUserGroupNameById(@Param("uid") Long uid, @Param("groupId") String groupId);

    /**
     * @param groupId 群组id
     * @param members 成员id
     * @title findUserGroupBaseInfoList
     * @description 获取当前用户 看到的群成员信息
     * @author quxinjun
     * @updateTime 2021/5/18 18:34
     * @return: java.util.List<com.ys.web.user.friends.vo.UserGroupVO>
     */
    List<UserGroupVO> findUserGroupBaseInfoList(@Param("groupId") String groupId, @Param("members") List<String> members, @Param("uid") Long uid);

    /**
     * @param uid     用户id
     * @param groupId 组id
     * @param value   值
     * @title updateUserGroupRemarkName
     * @description 修改用户群备注名称
     * @author quxinjun
     * @updateTime 2021/5/19 11:27
     */
    void updateUserGroupRemarkName(@Param("uid") Long uid, @Param("groupId") String groupId, @Param("value") String value);

    /**
     * @param id 组id
     * @throws
     * @title deleteMembers
     * @description 删除组全部成员（逻辑删除）
     * @author quxinjun
     * @updateTime 2021/5/19 20:55
     */
    void deleteMembers(Long id);

    /**
     * 修改审核状态
     *
     * @param groupId     组id
     * @param uid         操作人id
     * @param ids         user_group 表id
     * @param auditStatus 状态值
     */
    int updateAuditStatusByType(@Param("groupId") String groupId,
                                @Param("uid") Long uid,
                                @Param("ids") List<Long> ids,
                                @Param("auditStatus") Integer auditStatus);


    List<UnAuditVO> findUnAuditList(@Param("groupId") String groupId);

    /**
     * @param groupId 组id
     * @param uid     操作人id
     * @title findUserGroupEntityByGroupId
     * @description 通过组id 和 用户id 找到 用户群组对象
     * @author quxinjun
     * @updateTime 2021/5/24 19:03
     * @return: com.ys.web.user.friends.po.BaseUserGroupPO
     */
    BaseUserGroupPO findUserGroupEntityByGroupId(@Param("groupId") String groupId, @Param("uid") Long uid);

    /**
     * @param groupId  组id
     * @param memberId 成员id
     * @param code     身份编号
     * @title updateEntityIdentity
     * @description 修改用户身份
     * @author quxinjun
     * @updateTime 2021/5/24 19:48
     */
    void updateEntityIdentity(@Param("groupId") String groupId, @Param("memberId") String memberId, @Param("code") Integer code);

    /**
     * @param groupId 组id
     * @param uid     操作用户id
     * @title updateEntityStatus
     * @description 修改用户状态为退出
     * @author quxinjun
     * @updateTime 2021/5/24 19:54
     */
    void updateEntityStatus(@Param("groupId") String groupId, @Param("uid") Long uid);

    /**
     * @param groupId 组别id
     * @param type    类型
     * @title getMemberLeaveList
     * @description 获取踢出或者退出的成员信息
     * @author quxinjun
     * @updateTime 2021/5/24 20:16
     * @return: java.util.List<com.ys.web.user.friends.vo.UnAuditVo>
     */
    List<UnAuditVO> getMemberLeaveList(@Param("groupId") String groupId, @Param("type") Integer type);

    /**
     * @param groupId 组id
     * @title getGroupNameAndSize
     * @description 查询群组的名称级人数
     * @author quxinjun
     * @updateTime 2021/5/25 20:27
     * @return: java.lang.String
     */
    String getGroupNameAndSize(@Param("groupId") String groupId);

    /**
     * @param uid     用户id
     * @param groupId 组id
     * @title getCurrentGroupMembers
     * @description 获取当前组成员信息(排除操作者)
     * @author quxinjun
     * @updateTime 2021/5/26 11:56
     * @return: java.util.List<com.ys.web.user.friends.vo.UnAuditVO>
     */
    List<UserGroupVO> getCurrentGroupMembers(@Param("uid") Long uid, @Param("groupId") String groupId);

    /**
     * @param groupId 群组id
     * @title getCurrentGroupMembersAll
     * @description 获取当前组成员信息(不排除操作者)
     * @author quxinjun
     * @updateTime 2021/7/5 11:18
     * @return: java.util.List<com.ys.web.user.friends.vo.UserGroupVO>
     */
    List<UserGroupVO> getCurrentGroupMembersAll(@Param("groupId") Object groupId);

    /**
     * @param groupId  群组id
     * @param memberId 成员id
     * @param code     修改类型
     * @title setGroupManager
     * @description 设置管理员
     * @author quxinjun
     * @updateTime 2021/5/26 15:42
     * @return: int
     */
    int setGroupManager(@Param("groupId") String groupId, @Param("memberIds") List<Long> memberId, @Param("code") Integer code);

    /**
     * @param groupId 群组id
     * @title getManagerList
     * @description 获取管理员接口
     * @author quxinjun
     * @updateTime 2021/5/26 19:23
     * @return: java.util.List<com.ys.web.user.friends.vo.UserGroupVO>
     */
    List<UserGroupVO> getManagerList(@Param("groupId") String groupId, @Param("type") Integer type, @Param("uid") Long uid);

    List<BaseUserGroupPO> findUserLastObject(@Param("groupId") String groupId, @Param("memberIds") List<String> memberIds);

    void deleteOtherObject(@Param("groupId") String groupId, @Param("memberIds") List<String> memberIds);

    /**
     * @param insertList
     * @title insertListForAddGroup
     * @description 添加群成员
     * @author quxinjun
     * @updateTime 2021/6/10 18:44
     */
    void insertListForAddGroup(@Param("list") Set<ZSetOperations.TypedTuple<String>> insertList, @Param("uid") Long uid, @Param("groupId") Long groupId);

    /**
     * 查找群组中的用户的免打扰权限
     *
     * @param groupId
     * @return
     */
    List<Map<String, String>> findGroupUserSetDisturb(@Param("groupId") String groupId);

    /**
     * @param groupId
     * @title delUnAuditRow
     * @description 删除未审核的实体对象
     * @author quxinjun
     * @updateTime 2021/8/10 18:15
     */
    void delUnAuditRow(@Param("groupId") String groupId);

    /**
     * @param id
     * @param groupId
     * @title delObject
     * @description 在添加的时候  删除还没有审核的对象
     * @author quxinjun
     * @updateTime 2021/8/16 14:44
     */
    void delObject(@Param("id") String id, @Param("groupId") String groupId);

    /**
     * @param uid
     * @title getUserAllGroupMembersInfo
     * @description
     * @author quxinjun
     * @updateTime 2021/9/8 13:45
     * @return: java.util.List<com.ys.web.user.friends.vo.UserGroupVO>
     */
    List<UserGroupVO> getUserAllGroupMembersInfo(@Param("uid") Long uid);

    //查询所有管理员
    List<String> findAllManager();

    List<Map<String, String>> findData();

    void deleteGroupApply(@Param("list") List<String> userIdList);

    int updateInfoById(@Param("id") String id,@Param("isFreeze") int isFreeze);

    List<UnAuditVO> groupUserBlackList(String groupId);

    List<Long> userGroupId(@Param("uid") String uid);
}
